python割圆法求“圆周率” |
您所在的位置:网站首页 › python 求pai › python割圆法求“圆周率” |
欢迎加入我们卧虎藏龙的python讨论qq群:996113038 ┉┉┉┉┉┉ 『导语』 ┉┉┉┉┉┉ 割之弥细 所失弥少 割之又割 以至于不可割 则与圆合体而无所失矣 ----------《海岛算经》刘徽 中国的圆周率比西方早了近一千年 可谓是古人伟大的发现之一 当古时智慧与现代技术相结合 又会碰撞出怎样的火花呢 接下来让我们一起 用现代的Python 循着古时割圆术的思路 求出圆周率这一奇妙的数字 ¨¨¨『代码及相关资源获取』¨¨¨ 1:关注“python趣味爱好者”公众号,回复“割圆法 ”获取源代码。 2:加入群聊:996113038。在群文件中下载源代码以及相关资料。 效果演示: 开发工具: python3.6.4 相关第三方库: math turtle 往期精选: 押题?Python“学生成绩管理系统” 用Python“追踪”快递 讲解部分: 我们的代码分为两个,一个用来演示割圆法的原理,另一个用来计算割圆法的π值。 首先先讲一下割圆法的原理,其实很简单。大家看一看刚才那个视频就可以了。就是说。一个圆,我们怎样才能求出π。要知道,在中国古代,很长一段时间大家都求不出π的较精确值。 原理就是这样。我们假设存在一个正六边形,边长为1,当然,正六边形的“半径”也是1。 大家都知道这样一个公式:圆的周长=2*π*圆的半径。可以说,我们只需要得到了圆的周长,就可以通过:π=周长/(2*圆的半径)得到π的近似值。 割圆法的基本思路其实就是微积分的思路。即,把正n边形的每一条边都分隔成两个边,让正n边形变成正2n边形。求出正2n边形的边长,进而求出正2n边形的周长。 最后,通过微积分的思想,就可以让正n边形不断接近圆啦。 现在给大家讲一下代码: import math def zu(n): ## 假设边长为1 def f(x): ## 由当前边长,求割后边长 h = 1 - math.sqrt(1-(x/2)**2) return math.sqrt(h**2 + (a/2)**2) a = 1 ## 初始边长 k = 6 ## 初始边数 for i in range(n): a = f(a) k *= 2 return a * k / 2 if __name__ == '__main__': print(zu(10)) print(math.pi)以上就是求解π的完整代码,首先我们定义一个zu函数,这个函数就是求解π的函数。其中的形参就是n,代表迭代几次。a和k代表初始边长和初始边数,也就是说这是个边长为1的正6边形。 然后,我们定义一个f(x)来求出正n边形的边长,这个for循环迭代,里面的k是正多边形的边的数量,每次迭代,边的数量增加两倍,通过f(a)求出其半径。 for i in range(n): a = f(a) k *= 2迭代结束后,我们通过 return a * k / 2求出n边形的近似π值。用到的原理就是:π=周长/(2*圆的半径) 结果已经很接近了 不由得赞叹前辈们的智慧啊 本期分享到此结束 很高兴你能看到最后 作者|齐 编辑|潇洒哥 感谢大家观看 有钱的老板可以打赏一下小编哦 扫描下方二维码,关注我们~
参考资料: https://github.com/tianlelyd/pythonPainting https://blog.csdn.net/ggyhang/article/details/102541645 封面来源:花瓣网 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |